<?php

namespace Illuminate\Contracts\Auth;

/**
 * 身份认证守卫接口定义（无状态）
 */
interface Guard
{
    /**
     * 确认当前是否通过身份认证
     *
     * @return bool
     */
    public function check();

    /**
     * 确认当前是否是宾客身份
     *
     * @return bool
     */
    public function guest();

    /**
     * 获取当前经过身份验证的用户
     *
     * @return \Illuminate\Contracts\Auth\Authenticatable|null
     */
    public function user();

    /**
     * 获取当前经过身份验证的用户的 ID
     *
     * @return int|string|null
     */
    public function id();

    /**
     * 验证用户的凭证
     *
     * @param  array $credentials
     * @return bool
     */
    public function validate(array $credentials = []);

    /**
     * 修改当前用户对象
     *
     * @param  \Illuminate\Contracts\Auth\Authenticatable $user
     * @return void
     */
    public function setUser(Authenticatable $user);
}
